package com.sxj.corejava.code14_Lambda表达式;

import java.util.Arrays;
import java.util.List;

public class Test09_中间操作 {

    public static List<Integer> list = Arrays.asList(13, 6, 2, 1, 8, 21, 1, 16, 12, 2);

    public static void main(String[] args) {
//        testFilter();
//        testDistinct();
//        testLimit();
//        testSkip();
//        selectPage(3,2);
//        selectPage(3,4);
//        selectPage(4,4);
//        testMap();
//        testSorted();
        testSorted2();
    }

    public static void testFilter() {
        // 将集合转换成Stream
        list.stream()
                // 过滤条件,过滤所有偶数
                .filter(i -> i % 2 == 0)
                .forEach(System.out::println);
    }

    public static void testDistinct() {
        list.stream()
                .distinct()
                .forEach(System.out::println);
    }

    public static void testLimit() {
        list.stream()
                .limit(5)
                .forEach(System.out::println);
    }

    public static void testSkip() {
        list.stream()
                .skip(5)
                .forEach(System.out::println);
    }

    public static void selectPage(Integer pageNo, Integer pageSize) {
        // 在Stream中,skip方法与limit方法效果类似于MySQL中limit语句后面的两位参数
        // 因此,其分页规律与MySQL基本一致
        list.stream()
                // 分页的第一个参数,规律一致
                .skip((pageNo - 1) * pageSize)
                // 分页的第二个参数,规律一致
                .limit(pageSize)
                .forEach(System.out::println);
    }

    public static void testMap() {
        list.stream()
                // 将集合中所有元素的值翻倍
                .map(i -> i * 2)
                .forEach(System.out::println);
    }

    public static void testSorted() {
        list.stream()
                // 排序,升序
                // .sorted((o1,o2) -> o1 - o2)
                // 排序,降序
                .sorted((o1, o2) -> o2 - o1)
                .forEach(System.out::println);
    }

    public static void testSorted2() {
        List<String> names = Arrays.asList("admin", "tom", "jack");
        names.stream()
                // 排序,升序
//                 .sorted((o1,o2) -> o1.length() - o2.length())
                // 排序,降序
                .sorted((o1, o2) -> o2.length() - o1.length())
                .forEach(System.out::println);
    }
}
